home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGMISC / FORTRAN1.LZH / FORLIB.DOC < prev    next >
Text File  |  1988-02-08  |  49KB  |  1,439 lines

  1.  
  2.  
  3.        MM     MM   EEEEEEEEE   RRRRRR      LL       IIIIIIII   BBBBBB
  4.        MMM   MMM   EEEEEEEEE   RRRRRRR     LL       IIIIIIII   BBBBBBB
  5.        MM M M MM   EE          RR    RR    LL          II      BB    BB
  6.        MM  M  MM   EE          RR    RR    LL          II      BB    BB
  7.        MM     MM   EEEEE       RRRRRRR     LL          II      BBBBBBB
  8.        MM     MM   EE          RR  RR      LL          II      BB   BB
  9.        MM     MM   EE          RR   RR     LL          II      BB    BB
  10.        MM     MM   EEEEEEEEE   RR    RR    LLLLLLL  IIIIIIII   BBBBBBBB
  11.        MM     MM   EEEEEEEEE   RR    RR    LLLLLLL  IIIIIIII   BBBBBBB
  12.  
  13.  
  14.  
  15.  
  16. MERLIB is a collection of FORTRAN-callable subprograms which is intended to
  17. make powerful, general-purpose routines available without the need for each
  18. user to recode the utility.  A variety of useful routines for manipulating
  19. character data and doing I/O are available.  A few routines are available for
  20. curve fitting and file manipulations.  It is not intended to replace libraries
  21. such as IMSL with this library; there is little overlap in the functions
  22. between them.
  23.  
  24. The format of the entries in this document for each of the routines is :
  25. Subprogram name, type, purpose, arguments, and notes.  The subprogram name is
  26. the name by which the subprogram is called.  The type is either 'SUBROUTINE' or
  27. 'type FUNCTION' (eg, LOGICAL FUNCTION).  The purpose is self explanatory.
  28. The arguments are listed in the order in which they appear in the argument
  29. list.  Each argument is given a type and a mode; the mode refers to whether the
  30. argument is used as an input, produced as an output, or used as an input and
  31. then modified (update).  Notes are generally self-explanatory and are not
  32. included for all subprograms.
  33.  
  34. The following routines are included in the object library from DECUS releases:
  35.      DELAY, NARGS, TRAP, and  UNTRAP.
  36.  
  37. The following routines came from texts with the references in the source code:
  38.      GAUSS,  SORT,  ISORT,  KURV1,  KURV2,  and  INTRPL.
  39.  
  40. On the MERLIN system, MERLIB is automatically searched everytime a LINK command
  41. is issued.  As such, there is no modification to your normal LINK step.
  42.  
  43. Questions, suggestions, etc. regarding MERLIB should be addressed to the
  44. system manager.
  45.  
  46.                         List of Entry Points
  47.                         --------------------
  48.  
  49. ASCII    - convert strings to ASCII characters
  50. BLANKS    - remove blanks from a string
  51. CAPS    - capitalize a string
  52. CATEG    - categorize a token
  53. CENTER    - center a text string
  54. CLEAR    - clear a CRT screen
  55. CTIME    - wall-clock time
  56. DASCII    - convert ASCII characters to strings
  57. DATE    - calendar date
  58. DECHEX    - convert a number to a string (hexadecimal)
  59. DECOCT    - convert a number to a string (octal)
  60. DELAY    - do nothing for a short period of time
  61. DELETE    - delete a file
  62. DIR    - list a directory
  63. EXISTS    - test to see if a file exists
  64. FIRST    - find the first non-blank character in a string
  65. FRMSTD  - convert units from standard to non-standard (see TOSTD)
  66. GAUSS    - solve simultaneous, linear equations
  67. GETC    - get a single character from a text file
  68. GETCHAR    - wait until a character is typed at the terminal
  69. GETCPRV    - return the current privileges of the calling process
  70. GETFOR    - get the parameters and qualifiers from a foreign command
  71. GETIME    - retrieve CPU time
  72. GETLIN    - retrieve a line of text for parsing
  73. GETOKE    - parse the next token from a line
  74. GETPRV    - return the authorized privileges of the calling process
  75. GETTERM    - return the terminal name of the controlling terminal
  76. GETUSER    - get the name of the user calling the routine
  77. GETXY    - get the present cursor location on a VT100
  78. GOTOXY    - position the cursor on a VT100
  79. GPALFA  - return a GP-29 terminal to alpha mode
  80. GRALFA    - return a Graphon terminal to alpha mode
  81. HELP    - access a VMS help file
  82. HEXDEC    - convert a string (hexadecimal) to a number
  83. INTRPL    - Akima spline fit
  84. ISORT    - sort an array and an index array
  85. KEYHIT    - check to see if a key was struck
  86. KURV1/2    - cubic spline curve fit
  87. LEFT    - left justify a string
  88. LENGTH    - return the length of a string to the last non-blank character
  89. MBELL    - ring the bell
  90. NAE    - edit one to three arrays in memory
  91. NARGS    - return the number of arguments passed to the calling routine
  92. OCTDEC    - convert a string (octal) to a number
  93. OPER    - send a message to an operator
  94. OPERW   - send a message to an operator and wait for a reply
  95. PEEK    - return the value of a byte in memory
  96. PEEKW    - return the value of a long word in memory
  97. POKE    - set the value of a byte in memory
  98. POKEW    - set the value of a long word in memory
  99. PROMPT    - produce a prompt string
  100. PUTC    - put a single character to a file
  101. READT    - read a string with timeout
  102. REPLAC    - replace a character in a string with a different character
  103.  
  104. REVLF    - do a reverse line feed
  105. RIGHT    - right justify a string
  106. SCROLL    - set the scroll region on a VT100
  107. SEARCH    - binary search an array of tokens
  108. SEARCH1 - binary search an array of tokens for exact match
  109. SEND    - send a message to a user or terminal
  110. SENDW    - send a message to a user or terminal and wait
  111. SETIME    - start the CPU time clock
  112. SORT    - sort an array
  113. SRESET    - reset the scroll region on a VT100
  114. STAT    - display a status message on a VT100
  115. STATUS    - display a status message and return to unknown location
  116. TOSTD   - convert from non-standard units to standard units (see FRMSTD)
  117. T$RAP    - trap an error condition or control-C
  118. UNTAB    - remove tabs from a string
  119. UNT$RAP    - undo the effects of T$RAP
  120. VERIFY    - verify existance of only specified characters in a string
  121. WAIT    - do nothing for up to 10 minutes
  122. WEKDAY    - return the day of the week from a system time
  123. YESNO    - get the answer to a yes/no question
  124.  
  125. Subprogram : ASCII
  126.  
  127. Type : SUBROUTINE
  128.  
  129. Purpose : to replace ASCII mnemonic strings (such as those created by DASCII
  130. with the actual ASCII characters.  (See DASCII).
  131.  
  132. Arguments :
  133.       STRING - (character*(*),update) the string (of maximum length 255) which
  134.                 is to be converted.
  135.  
  136.  
  137. Subprogram : BLANKS
  138.  
  139. Type : SUBROUTINE
  140.  
  141. Purpose : Replace a string with the same string less all leading and embedded
  142. blanks.  Pad on the end with blanks to fill the string.
  143.  
  144. Arguments :
  145.       STRING - (character*(*),update) the string which is replaced by the
  146.                same string less blanks.
  147.       L      - (integer,output) the location of the last, non-blank character.
  148.  
  149. Notes : L is 0 if the entire line is blank.
  150.  
  151. Subprogram : CAPS
  152.  
  153. Type : SUBROUTINE
  154.  
  155. Purpose : Replace a string with the same string where all lower case letters
  156. have been capitalized.
  157.  
  158. Arguments:
  159.       STRING - (character*(*),update) string to be capitalized.
  160.  
  161. Subprogram : CATEG
  162.  
  163. Type : SUBROUTINE
  164.  
  165. Purpose : To look at a string and try to determine if the string represents
  166. an integer, logical, fixed point, floating point, or character string.
  167.  
  168. Arguments :
  169.      STRING  - (character*(*),update) the character string to categorize
  170.                 (the blanks are removed and it is capitalized).
  171.      TYPE    - (character*(1),output) the determined type :
  172.                  'A' - alphanumeric           'F' - fixed point real
  173.                  'D' - floating point double  'I' - integer
  174.                  'E' - floating point single  'L' - logical
  175.      FORM    - (character*(*),output) a FORTRAN FORMAT field for the variable
  176.  
  177. Notes :
  178.    FORM contains a FORMAT-like field.  The actual field may vary some.
  179.  
  180. Examples:
  181.           STRING(input)          TYPE(output)            FORM(output)
  182.           -------------          ------------            ------------
  183.            ' -123'                    I                       I4
  184.            '123.45'                   F                      F6.2
  185.            '.TRUE.'                   L                       L6
  186.            '1.234D-2'                 D                      D8.3
  187.  
  188. The value can then be obtained from an internal file read; eg:
  189.       S = '   -123'
  190.       CALL CATEG(S,T,FORM)
  191.       IF (T .EQ. 'I') READ(S,FORM) IVALUE
  192.  
  193. Subprogram : CENTER
  194.  
  195. Type : SUBROUTINE
  196.  
  197. Purpose : To center the text of a string within the field of the string (eg, a
  198. string of length 79 would be centered around column 39).
  199.  
  200. Arguments :
  201.        STRING - (character*(*),update) a string of maximum length 255 that is
  202.                 replaced with the centered string.
  203.  
  204. Subprogram : CLEAR
  205.  
  206. Type : SUBROUTINE
  207.  
  208. Purpose : Clear a CRT screen or advance to the top of a new page on a
  209. hardcopy terminal.
  210.  
  211. Arguments : None
  212.  
  213. Notes : the VAX version will retrieve the terminal type from the operating
  214. system tables (ie, as determined by the SET TERMINAL command).  The
  215. transportable version will send <FF> to all terminals.
  216.  
  217.  
  218. Subprogram : CTIME
  219.  
  220. Type : SUBROUTINE
  221.  
  222. Purpose : to return the present wall clock time from the operating system.
  223.  
  224. Arguments :
  225.       TIME - (character*8,output) the time in HH:MM AM/PM format
  226.               (eg, "11:23 AM" ).
  227.  
  228. Notes : Not transportable.  This is NOT the VMS builtin TIME subroutine,
  229. which returns time in HH:MM:SS format for a 24 hour clock.
  230.  
  231.  
  232. Subprogram : DASCII
  233.  
  234. Type : SUBROUTINE
  235.  
  236. Purpose : this subprogram replaces a string with the same string except all
  237. non-printable characters are replaced by a printable string.  If the character
  238. is one of the characters for which there is a standard mnemonic (eg, BEL) the
  239. standard mnemonic is inserted surrounded by '<' and '>' (eg, <BEL>).  If the
  240. ASCII value for the character is greater than 127 the value is inserted
  241. surrounded by < and > (eg, <164>).
  242.  
  243. Arguments :
  244.       STRING - (character*(*),update) the string to be converted/the converted
  245.                 string.
  246.  
  247. Subprogram : DATE
  248.  
  249. Type : SUBROUTINE
  250.  
  251. Purpose : to return the present calendar date from the operating system.
  252.  
  253. Arguments :
  254.       DATE - (character*8,output) the date in DD-MMM-YY format.
  255.  
  256. Notes : Not transportable.  This is the builtin DATE subroutine on VMS.
  257.  
  258. Subprogram : DECHEX
  259.  
  260. Type : SUBROUTINE
  261.  
  262. Purpose : to convert a decimal integer to a hex string.
  263.  
  264. Arguments :
  265.      I - (integer,input) the integer containing the value.
  266.      H - (character*8,output) the hex equivalent of I.
  267.  
  268. Notes : not transportable.
  269.  
  270.  
  271. Subprogram : DECOCT
  272.  
  273. Type : SUBROUTINE
  274.  
  275. Purpose : to convert an decimal integer into the equivalent octal value.
  276.  
  277. Arguments :
  278.       I - (integer,input) the decimal value.
  279.       O - (character*16,output) the octal string.
  280.  
  281. Notes : not transportable.
  282.  
  283. Subprogram : DELAY
  284.  
  285. Type : SUBROUTINE
  286.  
  287. Purpose : This subroutine delays the execution of a process a specified amount
  288. of time.  This execution delay is computed as follows: if (TIME_DELAY <= 0)
  289. then the passed parameter represents the number of 100-nanosecond units to
  290. elapse before program execution is resumed.  If (TIME_DELAY > 0) then the
  291. passed parameter represents the number of millisecond units to elapse before
  292. program execution is resumed.
  293.  
  294. Arguments :
  295.       DELAY - (integer,input) time to delay (see above).
  296.  
  297. Notes :
  298. 1. This subroutine assumes that the system clock has unit increments
  299. of 100-nanoseconds, which is consistent with the VAX-11/780 system time
  300. quadword format standard.
  301. 2. Not transportable.
  302.  
  303.  
  304. Subprogram : DELETE
  305.  
  306. Type : SUBROUTINE
  307.  
  308. Purpose : delete the specified file from the user's directory.
  309.  
  310. Arguments :
  311.       FILESPEC - (character*(*),input) the file specification of the file
  312.                      to be deleted (see notes for EXISTS).
  313.       ERROR    - (logical,output) FALSE if the deletion was performed without
  314.                      problem, TRUE otherwise.
  315.  
  316. Notes:
  317.    1. Not transportable.
  318.    2. FILESPEC must not contain wildcards.
  319.  
  320. Subprogram : DIR
  321.  
  322. Type : SUBROUTINE
  323.  
  324. Purpose : to produce a listing of the user's directory on the terminal.
  325.  
  326. Arguments :
  327.       DIRECTORY - (character*(*),input) the specification of the directory
  328.                       to be produced ( space for the default directory).
  329.       ERROR     - (logical,output) FALSE if the operation was successful,
  330.                        TRUE otherwise.
  331.  
  332. Notes :
  333. 1. On VMS, the error flag is unlikely to ever be set since VMS
  334. will produce a message instead of the directory listing if the
  335. directory doesn't exist or is read-protected; VMS doesn't consider this
  336. to be an error.  If 'directory' contains the string "/OUTPUT=filespec",
  337. the output will be produced to the file 'filespec'.
  338. 2. Not transportable.
  339.  
  340.  
  341.  
  342. Subprogram : EXISTS
  343.  
  344. Type : LOGICAL FUNCTION
  345.  
  346. Purpose : check to see if a file exists on the user's directory.
  347.  
  348. Arguments :
  349.       FILESPEC - (character*(*),input) the file specification of the file
  350.                     to be checked.
  351.       EXISTS   - (logical,output(FUNCTION value)) TRUE if the file is found,
  352.                     FALSE otherwise.
  353.  
  354. Notes :
  355. 1. The function value is set false if an error occurs in trying to open
  356. the file as an OLD (ie, existing) file.  This condition can be caused by
  357. problems other than a non-existent file (such as misspelled device names).
  358. 2. On the VAX, the file specification is the full VMS file specification
  359. (ie, node name, device name, directory name, file name).
  360.  
  361. Subprogram : FIRST
  362.  
  363. Type : SUBROUTINE
  364.  
  365. Purpose : to find the first, non-blank character in a string
  366.  
  367. Arguments :
  368.      STRING - (character*(*),input) the string to search.
  369.      CHAR   - (character*1,output) the first, non-blank character.
  370.      I      - (integer,output) the location of 'CHAR' in 'STRING'.
  371.  
  372. Notes : if STRING is completely blank, CHAR is returned as ' ' and I as 0.
  373.  
  374. Subprogram : FRMSTD
  375.  
  376. Type : SUBROUTINE
  377.  
  378. Purpose : convert a value (given in standard units) to the equivalent value
  379. for specified, non-standard units.
  380.  
  381. Arguments :
  382.      VALIN  - (real,input) the value in standard units.
  383.      STRIN  - (character*(*),input) the units of VALIN (in standard units).
  384.      VALOUT - (real,output) the value after conversion.
  385.      STROUT - (character*(*),input) the requested units for VALOUT.
  386.      IERR   - (integer,output) =0 for no error; 1 for illegal characters or
  387.                 exponent error; 2 for unknown unit in STRIN or STROUT;
  388.                 3 for excessively complex units; and 4 for failure to match
  389.                 STRIN and STROUT
  390.  
  391. Notes :
  392. 1. See also TOSTD
  393. 2. Units which are presently recognized by the program :
  394.  
  395.     UNIT                            ALIAS(ES)
  396.     ----                            ---------
  397.     CM
  398.     FEET                FT
  399.         FPS
  400.         GALLON                          GAL
  401.     GRAM                GM
  402.     HOUR                HR
  403.         HP
  404.     INCH                IN
  405.     KILOGRAM            KG
  406.     KILOMETER            KM
  407.         KNOTS
  408.         LITER                           L
  409.     METER                M
  410.     MILE                MI
  411.     MINUTE                MIN
  412.         MPH
  413.     NAUTMILE
  414.     NEWTON                N
  415.     POUND                LB
  416.         PSI
  417.     SECOND                S,SEC
  418.     SLUG
  419.     YARD                YD
  420.  
  421. Subprogram : GAUSS
  422.  
  423. Type : SUBROUTINE
  424.  
  425. Purpose : Solve a set of simultaneous, linear equations by Gaussian
  426. Elimination.
  427.  
  428. Arguments :
  429.      A     - (real,update) the matrix of coefficients (see notes).
  430.      Y     - (real,update) the vector of dependent values.
  431.      COEF  - (real,output) the solution vector.
  432.      N     - (integer,input) the number of equations.
  433.      ERROR - (logical,output) set TRUE if the matrix is singular.
  434.  
  435. Notes :
  436. 1.  'A' MUST be dimensioned EXACTLY (N,N).
  437. 2.  'Y' and 'A' are filled as follows :
  438.         Y1  =  A1,1*X1  +  A1,2*X2  +  ...  A1,N*XN
  439.         Y2  =  A2,1*X1  ...
  440.         .
  441.         YN  =  AN,1*X1 ...
  442. 3.  'A' and 'Y' are destroyed during solution.
  443.  
  444. Subprogram : GETC
  445.  
  446. Type : CHARACTER FUNCTION
  447.  
  448. Purpose : retrieve the next character from a text file.  User doesn't have to
  449. worry about lines or EOF.  End of line is returned as CHAR(13) and end of file
  450. is returned as CHAR(26).  All trailing blanks on the line are omitted.
  451.  
  452. Arguments :
  453.      NIN   - (integer,input) the FORTRAN logical unit number from which to read.
  454.      GETC  - (character,function value) the next character.
  455.  
  456. Subprogram : GETCHAR
  457.  
  458. Type : SUBROUTINE
  459.  
  460. Purpose : To retrieve a single character from the keyboard.  This routine will
  461. wait until a character is entered (up to 999 seconds) but does not require or
  462. read a carriage control after the character.
  463.  
  464. Arguments :
  465.      CH  - (byte,output) the ASCII integer equivalent of the character that
  466.             was entered (0 in the event of an error or timeout).
  467.      ERR - (logical,output) set TRUE if an error occurs, FALSE otherwise.
  468.  
  469. Notes :
  470. 1. Not transportable.
  471. 2. The difference between this routine and KEYHIT is that this routine always
  472. waits for a character (up to 999 seconds) and KEYHIT always returns immediately
  473. whether a character has been entered or not.
  474.  
  475. Subprogram : GETCPRV
  476.  
  477. Type : SUBROUTINE
  478.  
  479. Purpose : to retrieve the current privileges of the user who is running
  480. the program.
  481.  
  482. Arguments :
  483.      N     - (integer,output) the number of authorized privileges found.
  484.      PRIV  - (character*(*),output) an array containing the ASCII names
  485.               of the privileges found.
  486.  
  487. Notes:
  488. 1. Not transportable.
  489. 2. The names are the names given in the VMS system manager's guide.
  490. 3. Example :
  491.       CALL GETCPRV (N, PRIV)
  492.       DO 10 I = 1,N
  493.          IF (PRIV(I) .EQ. 'OPER') GO TO 20
  494. 10       CONTINUE
  495.       WRITE(6,*)' Insufficient privilege.'
  496.       STOP
  497. 20    ...
  498.  
  499. Subprogram : GETFOR
  500.  
  501. Type : SUBROUTINE
  502.  
  503. Purpose : To retrieve and parse the command line entered with a foreign
  504. command.  The line is parsed into qualifiers and parameters.  Blanks should
  505. only be used to seperate parameters(ie, /TIME = 2 will be returned as a
  506. qualifier and 2 parameters but /TIME=2 will be returned as a single qualifier).
  507. The slashes are not included in the entries in array QUALS.
  508.  
  509. Arguments :
  510.       NQ     - (integer,output) the number of qualifiers found.
  511.       QUALS  - (character*(*),output) an array in which the strings of the
  512.                   qualifiers will be returned.
  513.       NP     - (integer,output) the number of parameters found.
  514.       PARAMS - (character*(*),output) an array in which the strings of the
  515.                   parameters will be returned.
  516.  
  517. Notes :
  518. 1. Not transportable.
  519. 2. A foreign command is a program which has been identified to VMS by the line :
  520.     COMMAND :== $progname
  521. where progname is the file specification for an executable (.EXE) file.
  522. 3. The slashes are not included in the entries in array QUALS.
  523.  
  524.  
  525. Subprogram : GETIME
  526.  
  527. Type : SUBROUTINE
  528.  
  529. Purpose : To retrieve the CPU time used since the last call to GETIME and
  530. since the initial call to SETIME.
  531.  
  532. Arguments :
  533.       TOTAL - (real,output) time in seconds since the last call to SETIME.
  534.       DELTA - (real,output) time interval since the last call to GETIME.
  535.  
  536. Notes : SETIME must always be called before the first call to GETIME.
  537.  
  538. Subprogram : GETLIN
  539.  
  540. Type : SUBROUTINE
  541.  
  542. Purpose : To retrieve a line of text from a file less comments; multiple
  543. lines of input will be accepted if the last (non-comment) symbol is '...'.
  544. Anything after an '!' on a line of input is considered comment.
  545.  
  546. Arguments :
  547.       NREAD - (integer,input) FORTRAN unit number from which to read.
  548.       ERROR - (logical,output) an error occurred or the line was more than
  549.               500 characters long.
  550.       LINE  - (character*500,output) the line.
  551.       LEN   - (integer,output) the location of the last character read.
  552.  
  553. Notes : compatible with GETOKE.
  554. Subprogram : GETOKE
  555.  
  556. Type : SUBROUTINE
  557.  
  558. Purpose : to return the next token from a string being parsed.  A token ends
  559. with a space, comma, semicolon, or slash.
  560.  
  561. Arguments :
  562.       LINE   - (character*(*),input) the line to be parsed.
  563.       LEN    - (integer,input) the last location in LINE to look at.
  564.       IPTR   - (integer,update) the next character location to look at (set
  565.                to zero before first call).
  566.       TOKEN  - (character*20,output) the text of the token.
  567.       TYPE   - (character*1,output) the type of the token (see notes).
  568.       ERROR  - (logical,output) an error occurred if set true.
  569.  
  570. Notes : The types returned are:
  571.       N - Null (two delimiters in a row).
  572.       E - End of line encountered.
  573.       A - Alphabetic.
  574.       I - Integer number.
  575.       R - Real number.
  576.       S - Special, a single character not recognized as belonging to any
  577.           of the other types.
  578.  
  579. Subprogram : GETPRV
  580.  
  581. Type : SUBROUTINE
  582.  
  583. Purpose : to retrieve the authorized privileges of the user who is running
  584. the program.
  585.  
  586. Arguments :
  587.      N     - (integer,output) the number of authorized privileges found.
  588.      PRIV  - (character*(*),output) an array containing the ASCII names
  589.               of the privileges found.
  590.  
  591. Notes:
  592. 1. Not transportable.
  593. 2. The names are the names given in the VMS system manager's guide.
  594. 3. Example :
  595.       CALL GETPRV (N, PRIV)
  596.       DO 10 I = 1,N
  597.          IF (PRIV(I) .EQ. 'OPER') GO TO 20
  598. 10       CONTINUE
  599.       WRITE(6,*)' Insufficient privilege.'
  600.       STOP
  601. 20    ...
  602.  
  603.  
  604. Subprogram : GETTERM
  605.  
  606. Type : SUBROUTINE
  607.  
  608. Purpose : to retrieve the terminal name on which a user is logged on.
  609.  
  610. Arguments :
  611.      USER  - (character*(*),input) the name of the user.
  612.      TERM  - (character*(*),output) the name of the terminal (eg, TTA3: ).
  613.  
  614. Notes : Not transportable.
  615.  
  616. Subprogram : GETUSER
  617.  
  618. Type : SUBROUTINE
  619.  
  620. Purpose : to retrieve the user name of the user running the calling program.
  621.  
  622. Arguments :
  623.      USER  - (character*(*),output) - the user name.
  624.  
  625. Notes :
  626. 1. Not transportable.
  627. 2. USER is returned as 'ERROR' in the event of an error.
  628.  
  629. Subprogram : GETXY
  630.  
  631. Type : SUBROUTINE
  632.  
  633. Purpose : to retrieve the present location of the cursor from a VT-100 or
  634. compatible terminal.
  635.  
  636. Arguments :
  637.      NWRITE - (integer,input) the logical unit number assigned to the screen
  638.                (normally 6).
  639.      IX     - (integer,output) the column in which the cursor resides(1-132).
  640.      IY     - (integer,output) the row in which the cursor resides(1-24).
  641.  
  642. Notes :
  643. 1. The location (1,1) is the upper, left-hand corner.  This routine
  644. produces a '$' on the screen and waits 2 seconds.
  645. 2. Not transportable.
  646.  
  647. Subprogram : GOTOXY
  648.  
  649. Type : SUBROUTINE
  650.  
  651. Purpose : position the cursor on a VT-100 or compatible terminal.
  652.  
  653. Arguments :
  654.       NWRITE - (integer,input) the logical unit number assigned to the screen
  655.                 (normally 6).
  656.       IX     - (integer,input) column in which the cursor is to reside(1-132).
  657.       IY     - (integer,input) row in which the cursor is to reside(1-24).
  658.  
  659. Notes : the location (1,1) is the upper, left-hand corner.
  660.  
  661. Subprogram : GPALFA
  662.  
  663. Type : SUBROUTINE
  664.  
  665. Purpose : to return a Northwest Digital Systems GP-29 terminal to alphanumeric
  666. mode after using Tektronix graphics.
  667.  
  668. Arguments :
  669.      NWRITE - (integer,input) logical unit number for the screen.
  670. Subprogram : GRALFA
  671.  
  672. Type : SUBROUTINE
  673.  
  674. Purpose : to return a Graphon 140 to alphanumeric (VT100) mode after being used
  675. for Tektronix graphics.
  676.  
  677. Arguments :
  678.      NWRITE - (integer,input) the logical unit number for the screen.
  679. Subprogram : HELP
  680.  
  681. Type : SUBROUTINE
  682.  
  683. Purpose : to return a help message from a VMS-format help library.
  684.  
  685. Arguments :
  686.       LIBRARY - (character*(*),input) the filespec of the help library.
  687.       STRING  - (character*(*),input) the item on which help is requested.
  688.       ERROR   - (logical,output) true if there was an error.
  689.  
  690. Notes : Not transportable.
  691.  
  692. Subprogram : HEXDEC
  693.  
  694. Type : SUBROUTINE
  695.  
  696. Purpose : to convert a hexadecimal string to a decimal integer.
  697.  
  698. Arguments :
  699.      H - (character*8,input) the hexadecimal string.
  700.      I - (integer,output) the integer output.
  701.  
  702. Notes : not transportable.
  703. Subprogram : INTRPL
  704.  
  705. Type : SUBROUTINE
  706.  
  707. Purpose : cubic spline fit using the Akima multiple curve technique.  The
  708. output array contains a series of interpolated values.
  709.  
  710. Arguments :
  711.       L  - (integer,input) the number of elements in X and Y.
  712.       X  - (real,input) an array of dimension L containing the X values of the
  713.             curve to be fit.
  714.       Y  - (real,input) an array of dimension L containing the Y values of the
  715.             curve to be fit.
  716.       N  - (integer,input) the number of elements to be output from the inter-
  717.             polation routine.
  718.       U  - (real,input) an array of dimension N containing the X locations for
  719.             which the Y value is desired.
  720.       V  - (real,output) an array of dimension N into which the interpolated
  721.             values are placed.
  722.       IERR - (integer,output) = 0 for no error
  723.                               = 1 for L too small
  724.                               = 2 for N too small
  725.                               = 3 if X is not monotonicaly increasing.
  726.  
  727. Notes : X must be monotonicaly increasing.  If you want to fit a curve whose
  728. values are not monotonicaly increasing, use KURV1 and KURV2 in this library.
  729. If your output values are expected to be monotonicaly increasing, use INTRPL.
  730.  
  731. Subprogram : ISORT
  732.  
  733. Type : SUBROUTINE
  734.  
  735. Purpose : sort an array of character*20 variables in ascending, alphabetic
  736. order.  In addition, sort an array of indices so that arrays associated with
  737. the array to be sorted may be used in the sorted order.  See also SORT.
  738.  
  739. Arguments :
  740.       ARRAY  - (character*20,update) the array of elements to be sorted
  741.                 (inplace).
  742.       N      - (integer,input) the number of elements in ARRAY.
  743.       IND    - (integer,output) an array the same size as ARRAY which contains
  744.                 the new order of the indices (see example).
  745.  
  746. Example :
  747.      ARRAY = 'XYZ', 'ABC', 'LMN', 'DEF' and N = 4 before the call.  After the
  748. call, ARRAY = 'ABC', 'DEF', 'LMN', 'XYZ' and IND = 2, 4, 3, 1 (ie, the
  749. original location of the entries).
  750. Subprogram : KEYHIT
  751.  
  752. Type : SUBROUTINE
  753.  
  754. Purpose : Check the keyboard to see if a key has been hit.  If so, return
  755. the ASCII value of that character; otherwise, return 0.
  756.  
  757. Arguments :
  758.      CHAR  - (byte,output) the value of the key that was struck, or 0 if
  759.                 no key was struck.
  760.      ERROR - (logical,output) will be set TRUE if an error occurs, FALSE
  761.                 otherwise.
  762.  
  763. Notes :
  764. 1. Not transportable.
  765. 2. Warning!!!! Never use keyhit as follows; it will eat CPU time constantly:
  766.        10  CALL KEYHIT ( C, ERR )
  767.            IF (C .EQ. CHAR(0)) GO TO 10
  768. 3. The following is OK:
  769.        10  CALL KEYHIT ( C, ERR )
  770.            IF (C .EQ. CHAR(0)) THEN
  771.               CALL WAIT ( 2 )
  772.               GO TO 10
  773.            ENDIF
  774. 4. The following is PREFERRED :
  775.            CALL GETCHAR (C, ERR)
  776.  
  777. Subprogram : KURV1
  778.  
  779. Type : SUBROUTINE
  780.  
  781. Purpose : Set up the parameters used by KURV2 to interpolate a spline fitting
  782. the input data.
  783.  
  784. Arguments :
  785.        N     - (integer,input) Number of points to be fit.
  786.        X     - (real,input) Array of X values.
  787.        Y     - (real,input) Array of Y values.
  788.        SLP1  - (real,input) Slope at first point (degrees, counter-clockwise
  789.                   from positive X axis).
  790.        SLPN  - (real,input) Slope at last point (degrees, ...)
  791.        XP    - (real,output) Curvature parameters for KURV2.
  792.        YP    - (real,output) Curvature parameters for KURV2.
  793.        TEMP  - (real,update) Scratch work area (dimenion N+2).
  794.        S     - (real,output) Arc length of curve.
  795.        SIGMA - (real,input) Tension factor (if this value is negative, the end
  796.                  point slopes will be calculated, if positive, they should be
  797.                  input in SLP1 and SLPN.  A typical value is 1. )
  798. Subprogram : KURV2
  799.  
  800. Type : SUBROUTINE
  801.  
  802. Purpose : Return an interpolated value for the function calculated by KURV1.
  803.  
  804. Arguments :
  805.        T      - (real,input) Location on curve normalized from 0. to 1.
  806.        XS     - (real,output) Calculated Y value for T.
  807.        YS     - (real,output) Calculated Y value for T.
  808.        N      - (integer,input) Number of points in arrays.
  809.        X      - (real,input) Independent values array.
  810.        Y      - (real,input) Dependent values array.
  811.        XP     - (real,input) Information passed from KURV1.
  812.        YP     - (real,input) Information passed from KURV1.
  813.        S      - (real,input) the arc length passed from KURV1.
  814.        SIGMA  - (real,input) Tension factor.
  815.  
  816. Subprogram : LEFT
  817.  
  818. Type : SUBROUTINE
  819.  
  820. Purpose : Left justify a string.
  821.  
  822. Arguments :
  823.       STRING - (character*(*),update) the string to be left justified.
  824. Subprogram : LENGTH
  825.  
  826. Type : INTEGER FUNCTION
  827.  
  828. Purpose : To return the length of a string, where length is defined as the
  829. number of characters from the start of the string to the last non-blank
  830. character.
  831.  
  832. Arguments :
  833.       STRING - (character*(*),input) the string whose length is to be measured.
  834.       LENGTH - (function value)the length, as described above.
  835.  
  836. Note : The difference between this function and the builtin function, LEN, is
  837. that LEN always returns the value for the length in the CHARACTER statement
  838. regardless of whether or not the string is full.  If the entire string is blank
  839. the value returned will be 0.
  840.  
  841.  
  842. Subprogram : MBELL
  843.  
  844. Type : SUBROUTINE
  845.  
  846. Purpose : ring the terminal bell.
  847.  
  848. Arguments:
  849.       NUNIT  - (integer,input) the FORTRAN logical unit number of the terminal.
  850.  
  851. Comments: although transportable, it may not work with all terminals; it
  852. sends an ASCII <BEL> character.
  853.  
  854. Subprogram : NAE (NAE1, NAE2, NAE3, RNAE, RNAE1, RNAE2, RNAE3 )
  855.  
  856. Type : SUBROUTINE
  857.  
  858. Purpose : to provide a simple, screen-oriented editor for arrays.  There are a
  859. total of six callable subprograms in this group.  Three (those whose names
  860. begin with N) are used for editing integer arrays and three (those whose names
  861. begin with R) are used for editing real arrays.  NAE1 and RNAE1 are synonyms
  862. for NAE and RNAE respectively.  The digit appended to the name indicates how
  863. many arrays are edited at once; eg, NAE3 edits three integer arrays.
  864.  
  865. Arguments :
  866.      NREAD  - (integer,input) the FORTRAN logical unit number for the keyboard
  867.      NWRITE - (integer,input) the FORTRAN logical unit number for the screen
  868.      NUM    - (integer,update) the number of elements in the array(s) at the
  869.                 time of calling. This number will change if additions or
  870.                 deletions are made.
  871.      MAX    - (integer,input) the maximum number of elements permitted in the
  872.                 array(s) (ie, the dimension).
  873.      ARRAY  - (integer/real,update) the first data array.
  874.      ARRAY2 - (integer/real,update) the second data array (NAE2 and NAE3).
  875.      ARRAY3 - (integer/real,update) the third data array (NAE3).
  876.      ERROR  - (logical,output) set .TRUE. if an unrecoverable error was
  877.                 encountered, .FALSE. otherwise.
  878.  
  879. Notes:
  880.    1. For the versions with more than one array, all arrays must have the same
  881. number of elements in them and have the same dimension.
  882.    2. There is no version with arrays of mixed types.
  883.    3. There is no exit-without-saving option; if this is desired it must be
  884. provided by the user.
  885.    4. This subprogram only works on a VT100 compatible terminal and is not
  886. even remotely transportable.
  887.    5. The commands are :
  888.        A - Add empty elements to the end of the array(s).
  889.        B - go to the Beginning of the array(s).
  890.        D - Delete the line the cursor is on.
  891.        E - go to the End of the array(s).
  892.        I - Insert an empty element before the line the cursor is on.
  893.        R - Repaint the screen.
  894.        S - toggle the Scroll direction (default is down).
  895.        ?/H - print a Help message.
  896.        ^Z/Q - exit the editor.
  897.    6. A carriage return with nothing else on the line advances the cursor one
  898. line in the scroll direction.
  899.    7. A line with one or more numbers on it means replace the line the cursor
  900. is on with the new values.  If fewer numbers are entered than arrays being
  901. edited, the remaining entries will be unaffected.
  902.    8. It is not necessary to space out to the next field; as long as there is
  903. one or more spaces between entries the editor will rewrite the line properly.
  904.    9. ARRAY, ARRAY2, and ARRAY3 are real for RNAE, RNAE2, and RNAE3; they are
  905. integer for NAE, NAE2, and NAE3.
  906.  
  907. Subprogram : NARGS
  908.  
  909. Type : SUBROUTINE
  910.  
  911. Purpose : This subprogram will return the number of arguments passed
  912. to the subprogram which called it.
  913.  
  914. Arguments :
  915.       NUM - (integer,output) the number of arguments.
  916.  
  917. Notes : Not transportable.
  918.  
  919. Subprogram : OCTDEC
  920.  
  921. Type : SUBROUTINE
  922.  
  923. Purpose : to convert an octal string to a decimal integer.
  924.  
  925. Arguments :
  926.      O - (character*16,input) the octal string.
  927.      I - (integer,output) the integer result.
  928.  
  929. Notes : not transportable.
  930.  
  931. Subprogram : OPER
  932.  
  933. Type : SUBROUTINE
  934.  
  935. Purpose : to send a message to an operator.
  936.  
  937. Arguments :
  938.       MESSAGE - (character*(*),input) the text of the message to send.
  939.       WHO     - (character*(*),input) the name of the operator to whom the
  940.                   message should be sent (see notes).
  941.  
  942. Notes :
  943.    1. Not transportable
  944.    2. The operator names recognized are : CENTRAL, PRINT, TAPES, DISKS,
  945.          DEVICE, CARDS, NTWORK, CLUSTER, SECURITY, REPLY, and NETWORK.
  946.    3. NTWORK and NETWORK are identical.
  947.    4. If WHO matches none of the above, CENTRAL is used.
  948.  
  949. Subprogram : OPERW
  950.  
  951. Type : SUBROUTINE
  952.  
  953. Purpose : to send a message to an operator and wait for a reply.
  954.  
  955. Arguments :
  956.       MESSAGE - (character*(*),input) the text of the message to send.
  957.       WHO     - (character*(*),input) the name of the operator to whom the
  958.                   message should be sent (see notes).
  959.       REPLY   - (character*(*),output) the text typed by the operator in
  960.                   reply to the message.
  961.  
  962. Notes :
  963.    1. Not transportable
  964.    2. The operator names recognized are : CENTRAL, PRINT, TAPES, DISKS,
  965.          DEVICE, CARDS, NTWORK, CLUSTER, SECURITY, REPLY, and NETWORK.
  966.    3. NTWORK and NETWORK are identical.
  967.    4. If WHO matches none of the above, CENTRAL is used.
  968.    5. If an error occurs, REPLY will contain an error message of which the
  969.          first word is always "ERROR".
  970. Subprogram : PEEK
  971.  
  972. Type : INTEGER FUNCTION
  973.  
  974. Purpose : to return the value in the specified address in memory.
  975.  
  976. Arguments :
  977.       ADDR  - (integer,input) the address in memory to check.
  978.       PEEK  - (integer,function value) the integer value of the byte at
  979.                   ADDR (0 to 255).
  980.  
  981. Notes : Not transportable
  982.  
  983. Subprogram : PEEKW
  984.  
  985. Type : INTEGER FUNCTION
  986.  
  987. Purpose : to return the value in the specified address in memory.
  988.  
  989. Arguments :
  990.       ADDR  - (integer,input) the address in memory to check.
  991.       PEEKW - (integer,function value) the integer value of the word at
  992.                   ADDR.
  993.  
  994. Notes : Not transportable
  995. Subprogram : POKE
  996.  
  997. Type : SUBROUTINE
  998.  
  999. Purpose : to store a byte at a given address.
  1000.  
  1001. Arguments :
  1002.       IADDR  - (integer,input) the address where the byte will be stored.
  1003.       IBYTE  - (byte,input) the byte.
  1004.  
  1005. Notes : Not transportable.
  1006.  
  1007. Subprogram : POKEW
  1008.  
  1009. Type : SUBROUTINE
  1010.  
  1011. Purpose : to store a word at a given address.
  1012.  
  1013. Arguments :
  1014.       IADDR  - (integer,input) the address where the word will be stored.
  1015.       IWORD  - (integer,input) the word.
  1016.  
  1017. Notes : Not transportable.
  1018.  
  1019. Subprogram : PROMPT
  1020.  
  1021. Type : SUBROUTINE
  1022.  
  1023. Purpose : produce a prompt string to the terminal without a <CR>/<LF> at
  1024. the end of the line(ie, a prompt).
  1025.  
  1026. Arguments :
  1027.       NUNIT  - (integer,input)FORTRAN unit number to write to.
  1028.       STRING - (character*(*),input)string to be produced as the prompt.
  1029.  
  1030. Notes : Not transportable.
  1031. Subprogram : PUTC
  1032.  
  1033. Type : SUBROUTINE
  1034.  
  1035. Purpose : put a single character to a text file.  Buffer the character and
  1036. dump the buffer when a CHAR(13) is sent.
  1037.  
  1038. Arguments :
  1039.      C    - (input,character) the character to print.
  1040.      NOUT - (input,integer) the FORTRAN logical unit number for the output
  1041.              file.
  1042.  
  1043. Subprogram : READT
  1044.  
  1045. Type : SUBROUTINE
  1046.  
  1047. Purpose : read an array of characters from the terminal; return if no response
  1048. within a specified time limit.
  1049.  
  1050. Arguments :
  1051.      ITIME - (integer,input) the time (in seconds) before timing out.
  1052.      BUFF  - (byte(*),input) an array which will contain the characters read.
  1053.      NUM   - (integer,update) before the call, put the array dimension of BUFF
  1054.                  in NUM.  After the call, NUM has the number of bytes read.
  1055.      IRET  - (integer,output) the return status...
  1056.                  =0 for normal return
  1057.                  =1 for timeout period reached
  1058.                  =-1 for errors
  1059.  
  1060. Notes :
  1061.      1. Not transportable
  1062.      2. BUFF contains bytes, not characters.  They can be converted using
  1063. the CHAR function or appropriate equivalences.
  1064.      3. Normal return occurs when the user terminates the input with a
  1065. carriage return or control/Z.
  1066.  
  1067. Subprogram : REPLAC
  1068.  
  1069. Type : SUBROUTINE
  1070.  
  1071. Purpose : replace all of one character in a string with a new character.
  1072.  
  1073. Arguments :
  1074.       STRING - (character*(*),update) the string to be modified.
  1075.       OLD    - (character*1,input) the character to replace.
  1076.       NEW    - (character*1,input) the new character
  1077.  
  1078. Subprogram : REVLF
  1079.  
  1080. Type : SUBROUTINE
  1081.  
  1082. Purpose : to send a reverse line feed (cursor up one line) to the terminal.
  1083.  
  1084. Arguments :
  1085.       NWRITE - (integer,input) the FORTRAN logical unit number of the terminal.
  1086.  
  1087. Notes : the present version is for VT-100 and compatible terminals only, a more
  1088. generally applicable version is commented out.  Some terminals recognize
  1089. CHAR(11) as a reverse line feed.
  1090.  
  1091. Subprogram : RIGHT
  1092.  
  1093. Type : SUBROUTINE
  1094.  
  1095. Purpose : Right justify a string.
  1096.  
  1097. Arguments :
  1098.       STRING - (character*(*),update) the string to be right justified.
  1099.  
  1100. Subprogram : SCROLL
  1101.  
  1102. Type : SUBROUTINE
  1103.  
  1104. Purpose : to set the scroll region on a VT100-type terminal.
  1105.  
  1106. Arguments :
  1107.      NWRITE - (integer,input) the logical unit number for the screen.
  1108.      ITOP   - (integer,input) the top line to be included in the scroll.
  1109.      IBOT   - (integer,input) the bottom line to be included.
  1110.  
  1111. Notes :
  1112.      1. Not transportable.
  1113.      2. ITOP must be <= IBOT.
  1114.      3. ITOP and IBOT must be in the range 1-23.
  1115.      4. Always call SRESET before exiting a program that uses SCROLL.
  1116.  
  1117. Subprogram : SEARCH
  1118.  
  1119. Type : SUBROUTINE
  1120.  
  1121. Purpose : Search an array of character variables for the occurence of a
  1122. target character variable.  If no match is found, search for an entry for
  1123. which target is a non-ambiguous abreviation.
  1124.  
  1125. Arguments :
  1126.       STRING  - (character*(*),input) sorted array of potential keywords.
  1127.       NSTRNG  - (integer,input) number of entries in STRING.
  1128.       TARGET  - (character*(*),input) target variable with same length as the
  1129.                  entries in STRING.
  1130.       K       - (integer,output) the index of the matched keyword (if found).
  1131.       MATCHD  - (logical,output) TRUE if a match was found.
  1132.       AMBIG   - (logical,output) TRUE if no exact match was found and more
  1133.                  than one entry could be abreviated to TARGET. (MATCHD will
  1134.                  be TRUE regardless).
  1135. Notes:
  1136. Example - for the STRING array 'ABC', 'DEF', 'DOGGY' with NSTRNG = 3; the
  1137. following would result:
  1138.  
  1139.        TARGET             K           MATCHD           AMBIG
  1140.        ------            ---          ------           -----
  1141.         DEF               2            TRUE            FALSE
  1142.         XYZ               -            FALSE           FALSE
  1143.         DE                2            TRUE            FALSE
  1144.         D                 2            TRUE            TRUE
  1145.  
  1146. Subprogram : SEARCH1
  1147.  
  1148. Type : SUBROUTINE
  1149.  
  1150. Purpose : Search an array of character variables for the occurence of a
  1151. target character variable.
  1152.  
  1153. Arguments :
  1154.       STRING  - (character*(*),input) sorted array of potential keywords.
  1155.       NSTRNG  - (integer,input) number of entries in STRING.
  1156.       TARGET  - (character*(*),input) target variable with same length as the
  1157.                  entries in STRING.
  1158.       K       - (integer,output) the index of the matched keyword (if found).
  1159.       MATCHD  - (logical,output) TRUE if a match was found.
  1160.  
  1161. Notes:
  1162. Example - for the STRING array 'ABC', 'DEF', 'DOGGY' with NSTRNG = 3; the
  1163. following would result:
  1164.  
  1165.        TARGET             K           MATCHD
  1166.        ------            ---          ------
  1167.         DEF               2            TRUE
  1168.         XYZ               -            FALSE
  1169.         DE                2            FALSE
  1170.  
  1171.  
  1172. Subprogram : SEND
  1173.  
  1174. Type : SUBROUTINE
  1175.  
  1176. Purpose : Send a message to one or more users.
  1177.  
  1178. Arguments :
  1179.      USER  - (character*(*),input) the name of the user(s) or terminal to
  1180.               receive the message.
  1181.      TEXT  - (character*(*),input) the message text.
  1182.  
  1183. Notes :
  1184. 1. Not transportable.
  1185. 2. If 'USER' ends in a colon, the target is assumed to be a terminal(eg, TTA0:)
  1186. 3. If 'USER' is blank or an asterisk, the target is all users presently logged
  1187.    on.
  1188. 4. If neither 2 or 3 is the case, the target is a single user.
  1189. 5. There is no BELL sounded by SEND, but it may be included in TEXT as ^G.
  1190.  
  1191. Subprogram : SENDW
  1192.  
  1193. Type : SUBROUTINE
  1194.  
  1195. Purpose : Send a message to one or more users and wait for completion.
  1196.  
  1197. Arguments :
  1198.      USER  - (character*(*),input) the name of the user(s) or terminal to
  1199.               receive the message.
  1200.      TEXT  - (character*(*),input) the message text.
  1201.      NOK   - (integer,output) the number of terminals succesfully notified.
  1202.      NFAIL - (integer,output) the number of terminals that should have been
  1203.               notified, but failed due to a timeout or the terminal nobroad-
  1204.               cast switch was set.
  1205.  
  1206. Notes :
  1207. 1. Not transportable.
  1208. 2. If 'USER' ends in a colon, the target is assumed to be a terminal(eg, TTA0:)
  1209. 3. If 'USER' is blank or an asterisk, the target is all users presently logged
  1210.    on.
  1211. 4. If neither 2 or 3 is the case, the target is a single user.
  1212. 5. There is no BELL sounded by SEND, but it may be included in TEXT as ^G.
  1213.  
  1214. Subprogram : SETIME
  1215.  
  1216. Type : SUBROUTINE
  1217.  
  1218. Purpose : Start the CPU timer running for GETIME.
  1219.  
  1220. Arguments : NONE
  1221.  
  1222. Subprogram : SORT
  1223.  
  1224. Type : SUBROUTINE
  1225.  
  1226. Purpose : sort an array of character*20 variables in ascending, alphabetic
  1227. order.
  1228.  
  1229. Arguments :
  1230.       ARRAY  - (character*20,update) the array of elements to be sorted
  1231.                 (inplace).
  1232.       N      - (integer,input) the number of elements in ARRAY.
  1233.  
  1234. Subprogram : SRESET
  1235.  
  1236. Type : SUBROUTINE
  1237.  
  1238. Purpose : reset the VT-100 terminal after the use of STATUS (before exiting
  1239. the program).
  1240.  
  1241. Arguments :
  1242.       NWRITE - (integer,input) the logical unit number assigned to the screen.
  1243.  
  1244. Notes : not transportable.
  1245.  
  1246. Subprogram : STAT
  1247.  
  1248. Type : SUBROUTINE
  1249.  
  1250. Purpose : to reserve the top line of a VT-100 terminal for status printout and
  1251. to print a status message in reverse video.
  1252.  
  1253. Arguments :
  1254.       IX     - (integer,input) the column in which the cursor should reside
  1255.                  after the status information is displayed.
  1256.       IY     - (integer,input) the row in which the cursor should reside after
  1257.                  the status information is displayed.
  1258.       TEXT   - (character*(*),input) the message to be displayed (<=80 chars).
  1259.  
  1260. Notes :
  1261.    1. Always call SRESET before exiting the program to reset the scroll
  1262. region on the terminal.
  1263.    2. The difference between this routine and STATUS is that this routine
  1264. assumes you know the location where you want the cursor to return to.  If you
  1265. don't know where the cursor is, use STATUS.
  1266.    3. Not transportable.
  1267.  
  1268. Subprogram : STATUS
  1269.  
  1270. Type : SUBROUTINE
  1271.  
  1272. Purpose : to reserve the top line of a VT-100 terminal for status printout
  1273. and to print a status message in reverse video.
  1274.  
  1275. Arguments :
  1276.       NWRITE - (integer,input) the logical unit number assigned to the screen
  1277.                 (usually 6).
  1278.       TEXT   - (character*(*),input) the message to be displayed (<=80 chars).
  1279.  
  1280. Notes :
  1281.    1. Always call SRESET before exiting the program to reset the terminal's
  1282. scrolling region.
  1283.    2. Because of a rough part I couldn't fix, a dollar sign (actually an ESC)
  1284. is sent to the terminal to get the present cursor location.  There is then a
  1285. 1.5 second delay.  If you know the cursor location, STAT doesn't have these
  1286. drawbacks.
  1287.    3. Not transportable.
  1288.  
  1289. Subprogram : TOSTD
  1290.  
  1291. Type : SUBROUTINE
  1292.  
  1293. Purpose : convert a value (given in non-standard units) to the equivalent value
  1294. for standard units.
  1295.  
  1296. Arguments :
  1297.      VALIN  - (real,input) the value in non-standard units.
  1298.      STRIN  - (character*(*),input) the units of VALIN (in non-standard units).
  1299.      VALOUT - (real,output) the value after conversion.
  1300.      STROUT - (character*(*),output) the standard units for VALOUT.
  1301.      IERR   - (integer,output) =0 for no error; 1 for illegal characters or
  1302.                 exponent error; 2 for unknown unit in STRIN or STROUT;
  1303.                 and 3 for excessively complex units.
  1304.  
  1305. Notes :
  1306. 1. See FRMSTD
  1307. 2. Units which are presently recognized by the program :
  1308.  
  1309.     UNIT                            ALIAS(ES)
  1310.     ----                            ---------
  1311.     CM
  1312.     FEET                FT
  1313.         FPS
  1314.         GALLON                          GAL
  1315.     GRAM                GM
  1316.     HOUR                HR
  1317.         HP
  1318.     INCH                IN
  1319.     KILOGRAM            KG
  1320.     KILOMETER            KM
  1321.         KNOTS
  1322.         LITER                           L
  1323.     METER                M
  1324.     MILE                MI
  1325.     MINUTE                MIN
  1326.         MPH
  1327.     NAUTMILE
  1328.     NEWTON                N
  1329.     POUND                LB
  1330.         PSI
  1331.     SECOND                S,SEC
  1332.     SLUG
  1333.     YARD                YD
  1334.  
  1335. Subprogram : T$RAP & UNT$RAP
  1336.  
  1337. Type : SUBROUTINE
  1338.  
  1339. Purpose : T$RAP is a FORTRAN-callable routine which will intercept ^C
  1340. interrupts, and program exceptions.  The T$RAP is set up by the
  1341. FORTRAN statement CALL T$RAP(&line #,IERR), and program flow continues
  1342. normally until ^C is typed or a program exception occurs.  If a
  1343. T$RAPpable condition occurs, program flow will be redirected to 'line
  1344. #', the T$RAP will be removed, and the Error Code will be inserted in
  1345. INTEGER*4 variable IERR. The T$RAP will be cancelled if:
  1346.         (1) Routine UNT$RAP is called
  1347.         (2) Another T$RAP is inserted
  1348.         (3) A T$RAP occurs to 'line #'
  1349.         (4) The routine calling T$RAP issues a RETURN
  1350.  
  1351. Arguments :
  1352.       &LINE - (&integer,input) the line number to which control will transfer.
  1353.       IERR  - (integer,output) the error code that caused the trap condition.
  1354.  
  1355. Notes :
  1356. 1. Not transportable.
  1357. 2. UNT$RAP has no arguments.
  1358. 3. T$RAP and UNT$RAP were provided by DECUS.
  1359.  
  1360. Subprogram : UNTAB
  1361.  
  1362. Type : SUBROUTINE
  1363.  
  1364. Purpose : To replace a string with an equivalent string where ASCII HT (tabs)
  1365. are replaced with an appropriate number of blanks.  Appropriate, on the Vax, is
  1366. defined to be at 8 column intervals (Vax default).  The tab stop definitions
  1367. are in a data statement in the code.
  1368.  
  1369. Arguments :
  1370.       STRING - (character*(*),update) a string, of maximum length 255, which
  1371.                is replaced with the untabbed string.
  1372.  
  1373. Note : If untabbing causes the string to exceed its defined length, the string
  1374. will be truncated on the right.
  1375.  
  1376. Subprogram : VERIFY
  1377.  
  1378. Type : LOGICAL FUNCTION
  1379.  
  1380. Purpose : To verify that each character in the first string also appears in the
  1381. second string.
  1382.  
  1383. Arguments :
  1384.       STR1   - (character*(*),input) the string to be verified.
  1385.       STR2   - (character*(*),input) the string containing the valid
  1386.                 characters.
  1387.       VERIFY - (logical,function value) TRUE if each character in STR1 also
  1388.                 appears in STR2, FALSE otherwise.
  1389.  
  1390. Subprogram : WAIT
  1391.  
  1392. Type : SUBROUTINE
  1393.  
  1394. Purpose : wait for a short period of time.
  1395.  
  1396. Arguments :
  1397.       TIME - (integer,input) time in seconds (wall clock time) to pause.
  1398.  
  1399. Notes :
  1400. 1. The time is limited to 10 minutes.  This routine is not very useful for
  1401. periods of time less than 2 seconds (use DELAY).
  1402. 2. Not transportable.
  1403.  
  1404.  
  1405. Subprogram : WEKDAY
  1406.  
  1407. Type : SUBROUTINE
  1408.  
  1409. Purpose : To calculate the day of the week from a system date or time.
  1410.  
  1411. Arguments :
  1412.       DATE  - (character*30,input) the date (eg, '25-JAN-1985 12:10:00.00').
  1413.       DAY   - (character*9,output) the weekday (eg, 'SUNDAY').
  1414.  
  1415. Notes :
  1416. 1. The day will be returned as 'ERROR' if the date was specified incorrectly.
  1417. 2. Not transportable.
  1418.  
  1419. Subprogram : YESNO
  1420.  
  1421. Type : SUBROUTINE
  1422.  
  1423. Purpose : read the answer to a yes/no type of question in free format
  1424. with appropriate error checking.
  1425.  
  1426. Arguments :
  1427.       NUNIT - (integer,input) the input unit number.
  1428.       ISYES - (logical,update) should be set to the default value before the
  1429.                  call.  If the answer is intelligible, the value will be set
  1430.                  true if the first character of the response is Y, false if
  1431.                  the first character is N.  All other responses, including <CR>
  1432.                  will leave the value unchanged.
  1433.       ERROR - (logical,output) will be false if the user answered Yes, No, or
  1434.                  <CR>; will be set true otherwise.
  1435.  
  1436. Notes : Only the first non-blank character of the answer is tested; eg, YEP
  1437. is considered a YES answer.
  1438.  
  1439.